using EOSDigital.SDK;
using System.Collections.Generic;

namespace EOSDigital.API
{
	public sealed class AvValues : ValueBase
	{
		private static List<CameraValue> values;

		public static readonly CameraValue Auto;

		public static readonly CameraValue Invalid;

		public static CameraValue[] Values
		{
			get
			{
				return AvValues.values.ToArray();
			}
		}

		static AvValues()
		{
			AvValues.Auto = new CameraValue("Auto", 0, 0.0, PropertyID.Av);
			AvValues.Invalid = new CameraValue("N/A", -1, 0.0, PropertyID.Av);
			AvValues.values = new List<CameraValue>
			{
				AvValues.Auto,
				new CameraValue("1", 8, 1.0, PropertyID.Av),
				new CameraValue("1.1", 11, 1.1, PropertyID.Av),
				new CameraValue("1.2", 12, 1.2, PropertyID.Av),
				new CameraValue("1.2 (1/3)", 13, 1.2, PropertyID.Av),
				new CameraValue("1.4", 16, 1.4, PropertyID.Av),
				new CameraValue("1.6", 19, 1.6, PropertyID.Av),
				new CameraValue("1.8", 20, 1.8, PropertyID.Av),
				new CameraValue("1.8 (1/3)", 21, 1.8, PropertyID.Av),
				new CameraValue("2", 24, 2.0, PropertyID.Av),
				new CameraValue("2.2", 27, 2.2, PropertyID.Av),
				new CameraValue("2.5", 28, 2.5, PropertyID.Av),
				new CameraValue("2.5 (1/3)", 29, 2.5, PropertyID.Av),
				new CameraValue("2.8", 32, 2.8, PropertyID.Av),
				new CameraValue("3.2", 35, 3.2, PropertyID.Av),
				new CameraValue("3.5", 36, 3.5, PropertyID.Av),
				new CameraValue("3.5 (1/3)", 37, 3.5, PropertyID.Av),
				new CameraValue("4", 40, 4.0, PropertyID.Av),
				new CameraValue("4.5", 43, 4.5, PropertyID.Av),
				new CameraValue("4.5 (1/3)", 44, 4.5, PropertyID.Av),
				new CameraValue("5.0", 45, 5.0, PropertyID.Av),
				new CameraValue("5.6", 48, 5.6, PropertyID.Av),
				new CameraValue("6.3", 51, 6.3, PropertyID.Av),
				new CameraValue("6.7", 52, 6.7, PropertyID.Av),
				new CameraValue("7.1", 53, 7.1, PropertyID.Av),
				new CameraValue("8", 56, 8.0, PropertyID.Av),
				new CameraValue("9", 59, 9.0, PropertyID.Av),
				new CameraValue("9.5", 60, 9.5, PropertyID.Av),
				new CameraValue("10", 61, 10.0, PropertyID.Av),
				new CameraValue("11", 64, 11.0, PropertyID.Av),
				new CameraValue("13 (1/3)", 67, 13.0, PropertyID.Av),
				new CameraValue("13", 68, 13.0, PropertyID.Av),
				new CameraValue("14", 69, 14.0, PropertyID.Av),
				new CameraValue("16", 72, 16.0, PropertyID.Av),
				new CameraValue("18", 75, 18.0, PropertyID.Av),
				new CameraValue("19", 76, 19.0, PropertyID.Av),
				new CameraValue("20", 77, 20.0, PropertyID.Av),
				new CameraValue("22", 80, 22.0, PropertyID.Av),
				new CameraValue("25", 83, 25.0, PropertyID.Av),
				new CameraValue("27", 84, 27.0, PropertyID.Av),
				new CameraValue("29", 85, 29.0, PropertyID.Av),
				new CameraValue("32", 88, 32.0, PropertyID.Av),
				new CameraValue("36", 91, 36.0, PropertyID.Av),
				new CameraValue("38", 92, 38.0, PropertyID.Av),
				new CameraValue("40", 93, 40.0, PropertyID.Av),
				new CameraValue("45", 96, 45.0, PropertyID.Av),
				new CameraValue("51", 99, 51.0, PropertyID.Av),
				new CameraValue("54", 100, 54.0, PropertyID.Av),
				new CameraValue("57", 101, 57.0, PropertyID.Av),
				new CameraValue("64", 104, 64.0, PropertyID.Av),
				new CameraValue("72", 107, 72.0, PropertyID.Av),
				new CameraValue("76", 108, 76.0, PropertyID.Av),
				new CameraValue("80", 109, 80.0, PropertyID.Av),
				new CameraValue("91", 112, 91.0, PropertyID.Av),
				AvValues.Invalid
			};
		}

		public static CameraValue GetValue(int value)
		{
			return ValueBase.GetValue(value, AvValues.values);
		}

		public static CameraValue GetValue(string value)
		{
			return ValueBase.GetValue(value, AvValues.values);
		}

		public static CameraValue GetValue(double value)
		{
			return ValueBase.GetValue(value, AvValues.values);
		}
	}
}
